package cn.b.sky.mes.hr.service;

import java.util.Date;
import java.util.List;

import cn.b.sky.mes.hr.model.condition.ShiftingCondition;
import cn.b.sky.mes.hr.model.Shifting;
import cn.b.sky.common.model.BatchJobReport;

public interface ShiftingService {

  /**
   * 
   * <strong>Title : getShiftingsListByCondition<br></strong>
   * <strong>Description : </strong>根据查询条件获取排班列表<br> 
   * <strong>Create on : 2016年3月28日 上午9:14:44<br></strong>
   * <p>
   * @param condition
   * @return
   * List<Shifting>
   * @throws 
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br> 
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  List<Shifting> getShiftingsListByCondition(ShiftingCondition condition);

  /**
   * 
   * <strong>Title : getShiftingsCountByCondition<br></strong>
   * <strong>Description : </strong>根据查询条件获取排班数据总数<br> 
   * <strong>Create on : 2016年3月28日 上午9:15:11<br></strong>
   * <p>
   * @param condition
   * @return
   * int
   * @throws 
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  int getShiftingsCountByCondition(ShiftingCondition condition);

  Shifting getShiftingById(Long id);

  /**
   * 
   * <strong>Title : getShiftingByPersonnelAndDate<br></strong>
   * <strong>Description : </strong>查看当前职员当前天的排班数据（如果id不为0则表示除了该条数据以外的数据，否则全部数据）<br> 
   * <strong>Create on : 2016年3月29日 下午1:15:34<br></strong>
   * <p>
   * @param siteCode
   * @param personnelCode
   * @param theDate
   * @param id
   * @return
   * List<Shifting>
   * @throws 
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  List<Shifting> getShiftingByPersonnelAndDate(String siteCode, String personnelCode, String theDate, Long id);

  /**
   * 
   * <strong>Title : getNotPerformancesShiftingByPersonnelAndDate<br></strong>
   * <strong>Description : </strong>查询没有录入绩效的排班，启用排班使用<br> 
   * <strong>Create on : 2016-4-8 下午2:49:38<br></strong>
   * <p>
   * @param siteCode
   * @param personnelCode
   * @param theDate
   * @return
   * List<Shifting>
   * @throws 
   * @author lidapeng<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  List<Shifting> getNotPerformancesShiftingByPersonnelAndDate(String siteCode, String personnelCode, String theDate);

  /**
   * 
   * <strong>Title : getShiftingByPersonnelAndPeriod<br></strong>
   * <strong>Description : </strong>查询当前日期48h范围内的排班数据（如果id不为0则表示除了该条数据以外的数据，否则全部数据）<br> 
   * <strong>Create on : 2016年3月30日 下午4:06:05<br></strong>
   * <p>
   * @param siteCode
   * @param personnelCode
   * @param theDate
   * @param id
   * @return
   * List<Shifting>
   * @throws 
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  List<Shifting> getShiftingByPersonnelAndPeriod(String siteCode, String personnelCode, String theDate, Long id);

  void saveShifting(Shifting shifting, boolean isShiftingAble);

  /**
   * 
   * <strong>Title : deleteShiftingById<br></strong>
   * <strong>Description : </strong>根据id删除排班数据<br> 
   * <strong>Create on : 2016年4月8日 下午3:35:38<br></strong>
   * <p>
   * @param id
   * @param isShiftingAble
   * @return
   * BatchJobReport
   * @throws 
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  BatchJobReport deleteShiftingById(Long id, boolean isShiftingAble);

  /**
   * 
   * <strong>Title : getShiftingsByWorkcenterAndDate<br></strong>
   * <strong>Description : </strong>查询某个工作中心所有人当前日期的排班情况<br> 
   * <strong>Create on : 2016-4-8 下午4:18:12<br></strong>
   * <p>
   * @param siteCode
   * @param workcenterCode
   * @param theDate
   * @return
   * List<Shifting>
   * @throws 
   * @author lidapeng<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  List<Shifting> getShiftingsByWorkcenterAndDate(String siteCode, String workcenterCode, String theDate);

  /**
   * 
   * <strong>Title : getNotPerformancesShiftingByWorkcenterAndDate<br></strong>
   * <strong>Description : </strong>查询某个工作中心所有人当前日期的排班情况,未录入绩效的<br> 
   * <strong>Create on : 2016-4-8 下午4:18:17<br></strong>
   * <p>
   * @param siteCode
   * @param workCenterCode
   * @param format
   * @return
   * List<Shifting>
   * @throws 
   * @author lidapeng<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  List<Shifting> getNotPerformancesShiftingByWorkcenterAndDate(String siteCode, String workCenterCode, String format);

  /**
   * 
   * <strong>Title : getLatestAnnangedDate<br></strong>
   * <strong>Description : </strong>获取指定工作中心最新的排班日期<br> 
   * <strong>Create on : 2016年4月6日 下午7:16:21<br></strong>
   * <p>
   * @param siteCode
   * @param workcenterCode
   * @return
   * Date
   * @throws 
   * @author dapeng.li<br>
   * @version <strong>v1.0.0</strong><br>
   * <br>
   * <strong>修改历史:</strong><br>
   * 修改人 | 修改日期 | 修改描述<br>
   * -------------------------------------------<br>
   * <br>
   * <br>
   */
  Date getLatestAnnangedDate(String siteCode, String workcenterCode);

}
